package compar;

/**
 * Created with IntelliJ IDEA.
 * ClassName: compar.Test2
 * Package: PACKAGE_NAME
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 * Date: 2023-08-19
 * Time: 17:11
 */

//StringBuffer 和 StringBuilder
public class Test2 {
    public static void main(String[] args) {
        //都是可变数组 底层使用char[]
        //SBuffer 线程安全的 效率低
        //SBuilder 线程不安全 效率高
        //他两的父类是一样的 AbstractStringBuilder 本期区别就是加没加 synchronized

        //争对 String
        String s1 = new String(); //底层 char[] val = new char[0];
        String s2 = new String("abc");
        //底层 char[] val = new char[]{'a','b','c'}

        //StringBuffer 初始化容量是16
        //底层存储
        //char[] val = new char[16];
        //int count //实际存储的字符个数
        StringBuffer sb = new StringBuffer();
        //底层的char数组 没有final修饰
        //char[] val = new char[16]; 什么都没有 但是数组长度是16

        StringBuffer sb1 = new StringBuffer("abc");
        //char[] val = new char[16 + "abc".length];
        //就是始终空着16个字符的位置

        //底层逻辑
        sb1.append("a");//val[0] = 'a'
        sb1.append("c");//val[1] = 'c'

        //不断的添加 添加到17个字符就要创建 新的数组
        //扩容机制 默认的容量*2 再加+2 并将原有数组元素复制到新的数组
        //如果扩容之后还不够 就要多少容量 给多少容量(突然添加了很多字符)

        //频繁的对字符串的增删查改操作 建议使用StringBuffer和StringBuilder

        //指定底层数组长度的构造器 避免多次扩容




    }
}
